<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <script>
       // 自定义构造函数
       function Studance(name,age) {
      // 实例成员可以使用实例对象来调用，this添加
      this.name = name;
      this.age = age;
      // this内部的type属性不可变
      this.type = "bus";
      // 每个实例对象fun方法都是一样的
      this.fuu = function () {
        console.log(this.age);
      }
    }
      // 生成对象的实例
        var st1 = new Studance("试试",115);
        var st2 = new Studance("自杀",112);
        console.log(st1.fuu === st2.fuu);
      
        // 构造函数的问题，浪费内存
        // 解决方法
        // 1.将公共函数提取
              function fuu() {
              console.log(this.age);
            }
            // 多个公共函数在外面可能会导致重名
            function ages() {
              console.log(this.ages);
            }
              function Studance(name,age) {
            this.name = name;
            this.age = age;
            this.type = "bus";
            this.ages = ages;
            this.fuu = function () {
              console.log(this.age);
            }
          }
          // 单列模式
        // 将多个公共函数封装到一个对象中
          var funs = {
            agesn : ages,
            fuu : function () {
               console.log(this.age);
             }
            }
          function fuu() {
            console.log(this.age);
          }
            // 多个公共函数在外面可能会导致重名
            function ages() {
              console.log(this.ages);
            }
              function Studance1(name,age) {
            this.name = name;
            this.age = age;
            this.type = "bus";
            this.agesn = funs.agesn;
            this.fuu = funs.fuu;
          }
          
          var st11 = new Studance1("试1试",1015);
          var st12 = new Studance1("自1杀",1012);
          console.log(st11.fuu === st12.fuu);//true
  </script>
</body>
</html>